Swing verpackt View und Controller jeder Komponente in ein Objekt namens UI-Delegate. Aus diesem Grund wird die Swing zugrunde liegende Architektur als Model-Delegate statt als Model-View-Controller bezeichnet. Idealerweise erfolgt jegliche Kommunikation zwischen dem Modell und dem UI-Delegate auf indirekte Weise, so dass mehr als ein Modell mit einem UI-Delegate verknüpft werden kann und umgekehrt.
UI-Delegates
Jedes UI-Delegate ist von einer abstrakten Klasse namens ComponentUI abgeleitet. ComponentUI-Methoden beschreiben die grundlegende Art und Weise, wie ein UI-Delegate und eine Komponente, die dieses benutzt, miteinander kommunizieren. Man beachte, dass jede Methode eine JComponent als Parameter erwartet. Die wichtigsten ComponentUI-Methoden sind hier aufgelistet:
- static ComponentUI createUI(JComponent c): Diese Methode wird normalerweise so implementiert, dass sie eine gemeinsame Instanz des UI-Delegate zurückgibt, das von der definierenden Unterklasse ComponentUI selber definiert wird. Diese Instanz wird für den Austausch unter Komponenten desselben Typs verwendet. Ein Beispiel: Alle JButtons, die das Metal-Look-and-Feel verwenden, teilen dieselbe statische UI-Delegate-Instanz, die standardmäßig in javax.swing.plaf.metal.MetalButtonUI definiert ist.
- installUI(JComponent c): Diese Methode installiert die ComponentUI auf der angegebenen Komponente. Dadurch werden der Komponente und/oder ihrem Modell normalerweise Listener hinzugefügt, die das UI-Delegate benachrichtigen, wenn sich Statusänderungen ergeben, die eine Aktualisierung der Ansicht (View) erforderlich machen.
- update(Graphics g, JComponent c): Falls die Komponente undurchsichtig ist, zeichnet diese Methode den Hintergrund und ruft dann paint(Graphics g, JComponent c) auf.
- paint(Graphics g, JComponent c): Diese Methode erhält alle benötigten Informationen von der Komponente und eventuellen Modellen, um sie korrekt darzustellen.
Um die Verwendung eines bestimmten UI-Delegate zu erzwingen, kann man die Methode setUI() einer Komponente wie folgt aufrufen:
Die Klasse JComponent definiert Methoden zum Zuordnen von UI-Delegates, weil die erforderlichen Methodendeklarationen keinen komponentenspezifischen Code enthalten. Allerdings ist dies bei Datenmodellen nicht möglich. Hier gibt es nämlich kein grundlegendes Interface, das für alle Modelle gilt. Das heißt, es gibt keine Basisklasse wie ComponentUI für Swing-Modelle. Aus diesem Grund werden die Methoden zum Zuordnen von Modellen bei Bedarf in Unterklassen von JComponent definiert.
Neueste Kommentare
Noch keine Kommentare zu GUI-Design mit der Java-Swing-API: So verwendet man PLAF
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.